package top.meeting.room.common.kit;


import com.jfinal.kit.StrKit;

import java.util.Arrays;
import java.util.LinkedList;
import java.util.List;
import java.util.stream.Collectors;

/**
 * 我有故事，你有酒么？
 * JKhaled created by yunqisong@foxmail.com 2017/7/30
 * FOR : ListKit
 */
public class ListKit {
    /**
     * 返回 A 中元素的一个子集，这个子集中的元素全部能在B中找得到
     *
     * @param A
     * @param B
     * @return
     */
    public static <T> List<T> AHasB(List<T> A, List<T> B) {
        List retVal = null;
        if (B != null && B.size() != 0) {
            retVal = new LinkedList();
            for (Object obj : A) {
                if (B.contains(obj))
                    retVal.add(obj);
            }
        }
        return retVal;
    }

    /**
     * 返回 A 中元素的一个子集这个子集为 A 中元素剔除了A和B共有的部分的元素
     *
     * @param A
     * @param B
     * @param <T>
     * @return
     */
    public static <T> List<T> ARemoveB(List<T> A, List<T> B) {
        if (B == null || B.size() == 0) return new LinkedList<T>(A);
        List retVal = new LinkedList();
        for (Object obj : A) {
            if (!B.contains(obj))
                retVal.add(obj);
        }
        return retVal;
    }


    /**
     * 将格式化的ID字符串转化为对应的idList数组
     *
     * @param ids
     * @return
     */
    public static List<Long> ids2List(String ids) {
        return StrKit.notBlank(ids) ? Arrays.stream(ids.split(",")).map(id -> {
            return Long.valueOf(id);
        }).collect(Collectors.toList()) : null;
    }

    /**
     * 将ID数组转化为对应的格式化ids字符串
     *
     * @param idList
     * @return
     */
    public static String list2Ids(List<Long> idList) {
        StringBuffer ids = new StringBuffer();
        for (Long id : idList) ids.append(String.valueOf(id) + ',');
        return ids.length() >= 1 ? ids.substring(0, ids.length() - 1) : null;
    }

    /**
     * 将ID数组转化为|1|2|格式字符串
     *
     * @param idList
     * @return
     */
    public static String list2AbsIds(List<Long> idList) {
        StringBuffer ids = new StringBuffer("|");
        for (Long id : idList) ids.append(String.valueOf(id) + '|');
        return ids.length() > 1 ? ids.toString() : null;
    }

    /**
     * 将|1|2|格式字符串转化为id数组
     *
     * @param absIds
     * @return
     */
    public static List<Long> absIds2List(String absIds) {
        return (StrKit.isBlank(absIds) || absIds.length() < 2) ? null : Arrays.stream(absIds.substring(1, absIds.length()-1).split("\\|")).map(id -> {
            return Long.valueOf(id);
        }).collect(Collectors.toList());
    }

}
